package br.com.sgi.bean;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import br.com.sgi.model.Agenda;
import br.com.sgi.service.AgendaService;
import br.com.sgi.service.MembroService;
import br.com.sgi.service.VisitanteService;
import br.com.sgi.util.DateUtil;
import br.com.sgi.vo.MembroVo;

@Controller("baseView")
@Scope("session")
public class BaseView {

	private List<MembroVo> listNiverMes;
	private List<MembroVo> listNiverDia;
	private List<Agenda> listAgendaDia;
	private List<Agenda> listAgendaMes;

	private boolean exibirBotaoNovo;
	private boolean exibirBotaoAtualizar;
	private boolean exibirCadastro;
	private boolean exibirPesquisa;
	private boolean exibirBotaoVoltar;
	private boolean exibirBotaoExcluir;
	private boolean exibirBotaoSalvar;

	protected boolean registroNaoEncontrado;

	@Autowired
	private AgendaService agendaService;

	@Autowired
	private MembroService membroService;

	@Autowired
	private VisitanteService visitanteService;

	private String bannerAnviersariosMes;
	private String bannerAniverssariosDia;
	private String bannerCompromissosMes;
	private String bannerCompromissosDia;

	private boolean exibirIfen;

	protected String acaoTela;
	private String relatorioCorrente;

	private String funcionalidade;

	private final String ACAO_CADASTRO = "CADASTRAR ";
	private final String ACAO_ATUALIZAR = "ATUALIZAR ";

	private List<MembroVo> listaResult;

	private List<MembroVo> listaNiverMembroVisitante;
	
	protected String NOME_TELA = "";

	private String foward = "";

	public void carregarDados() {
		getBannerAniverssariosDia();
		getBannerAnviersariosMes();
		getBannerCompromissosDia();
		getBannerCompromissosMes();
	}

	public String getAcaoTela() {
		if (acaoTela == null) {
			acaoTela = "";
		}
		return acaoTela;
	}

	public String getBannerAniverssariosDia() {
		listNiverDia = membroService.buscarAniversariantesDia(false);

		if (listNiverDia == null) {
			listNiverDia = new ArrayList<MembroVo>();
		}

		listNiverDia.addAll(visitanteService.buscarAniversariantesDia(false));

		bannerAniverssariosDia = "";
		if (listNiverDia != null && listNiverDia.size() > 0) {
			bannerAniverssariosDia = "<ul> ";
			for (MembroVo membroVo : listNiverDia) {
				bannerAniverssariosDia += " <li>" + membroVo.getNome() + "</li>\n";
			}
			bannerAniverssariosDia += " </ul> ";
		} else {
			bannerAniverssariosDia = " <ul>  <li> Não há anviersariantes hoje. </li> </ul> ";
		}

		return bannerAniverssariosDia;
	}

	public String getBannerAnviersariosMes() {
		listNiverMes = membroService.buscarAniversariantesMes(false);

		if (listNiverMes == null) {
			listNiverMes = new ArrayList<MembroVo>();
		}

		listNiverMes.addAll(visitanteService.buscarAniversariantesMes(false));
		listNiverMes = listaAniversarioOrdenadaData(listNiverMes);
		bannerAnviersariosMes = "";
		if (listNiverMes != null && listNiverMes.size() > 0) {

			bannerAnviersariosMes = "<ul> ";
			for (MembroVo membroVo : listNiverMes) {
				bannerAnviersariosMes += " <li>" + membroVo.getNome() + " - "
						+ DateUtil.getDataAtualPorExtenso(membroVo.getDtNascimento()) + "</li>\n";
			}
			bannerAnviersariosMes += " </ul> ";
		} else {

			bannerAnviersariosMes = "<ul>  <li>  Não há anviersários nesse mês.  </li> </ul> ";
		}
		return bannerAnviersariosMes;
	}

	public String getBannerCompromissosDia() {
		listAgendaDia = agendaService.buscarAgendaDoDia();
		bannerCompromissosDia = " ";
		if (listAgendaDia != null && listAgendaDia.size() > 0) {
			bannerCompromissosDia = "<ul> ";
			for (Agenda agenda : listAgendaDia) {
				bannerCompromissosDia += " <li >" + agenda.getTitulo() + "- De "
						+ agenda.getHoraInicio() + " a " + agenda.getHoraInicio() + "</li>\n";
			}
			bannerCompromissosDia += " </ul> ";
		} else {
			bannerCompromissosDia = "<ul>  <li> Não há compromissos para hoje. </li> </ul> ";
		}
		return bannerCompromissosDia;
	}

	public String getBannerCompromissosMes() {
		listAgendaMes = agendaService.buscarAgendaDoMes();
		String corCompromisso = "";

		bannerCompromissosMes = "";
		if (listAgendaMes != null && listAgendaMes.size() > 0) {
			bannerCompromissosMes = "<ul> ";
			for (Agenda agenda : listAgendaMes) {

				if (DateUtil.isDataInformadaMenorDataAtual(agenda.getData())) {
					corCompromisso = "style=" + '"' + "color: #FF3300" + '"';
				} else {
					corCompromisso = "style=" + '"' + "color: #00CC00" + '"';
				}

				bannerCompromissosMes += " <li " + corCompromisso + " >" + agenda.getTitulo()
						+ " - " + DateUtil.getDateStr(agenda.getData()) + "- De "
						+ agenda.getHoraInicio() + " a " + agenda.getHoraInicio() + "</li>\n";
			}
			bannerCompromissosMes += " </ul> ";
		} else {
			bannerCompromissosMes = "<ul>  <li> Não há compromissos para esse mês. </li> </ul> ";
		}
		return bannerCompromissosMes;
	}

	public String getFoward() {
		return foward;
	}

	public String getFuncionalidade() {
		return funcionalidade;
	}

	public List<MembroVo> getListaResult() {
		return listaResult;
	}

	public String getRelatorioCorrente() {
		return relatorioCorrente;
	}

	public boolean isExibirBotaoAtualizar() {
		return exibirBotaoAtualizar;
	}

	public boolean isExibirBotaoExcluir() {
		return exibirBotaoExcluir;
	}

	public boolean isExibirBotaoNovo() {
		return exibirBotaoNovo;
	}

	public boolean isExibirBotaoSalvar() {
		return exibirBotaoSalvar;
	}

	public boolean isExibirBotaoVoltar() {
		return exibirBotaoVoltar;
	}

	public boolean isExibirCadastro() {
		return exibirCadastro;
	}

	public boolean isExibirIfen() {
		if (bannerAnviersariosMes != "" && bannerCompromissosMes != "") {
			exibirIfen = true;
		} else {
			exibirIfen = false;
		}

		return exibirIfen;
	}

	public boolean isExibirPesquisa() {
		if (!exibirCadastro) {
			exibirPesquisa = true;
		}
		return exibirPesquisa;
	}

	public boolean isRegistroNaoEncontrado() {
		return registroNaoEncontrado;
	}

	/**
	 * retorna apenas 9 aniversariante ordenados por data
	 * 
	 * @param listaNiverMes
	 * @return
	 */
	private List<MembroVo> listaAniversarioOrdenadaData(List<MembroVo> listaNiverMes) {
		List<MembroVo> listNive = new ArrayList<MembroVo>();
		int cont = 1;
		for (MembroVo membroVo : listaNiverMes) {
			if (cont < 10) {
				listNive.add(membroVo);
			} else {
				break;
			}
			cont++;
		}

		return listNive;
	}

	public String redirect() {
		return foward;
	}

	public void setAcaoTela(String acaoTela) {
		this.acaoTela = acaoTela;
	}

	public void setBannerAniverssariosDia(String bannerAniverssariosDia) {
		this.bannerAniverssariosDia = bannerAniverssariosDia;
	}

	public void setBannerAnviersariosMes(String bannerAnviersariosMes) {
		this.bannerAnviersariosMes = bannerAnviersariosMes;
	}

	public void setBannerCompromissosDia(String bannerCompromissosDia) {
		this.bannerCompromissosDia = bannerCompromissosDia;
	}

	public void setBannerCompromissosMes(String bannerCompromissosMes) {
		this.bannerCompromissosMes = bannerCompromissosMes;
	}

	public void setExibirBotaoAtualizar(boolean exibirBotaoAtualizar) {
		this.exibirBotaoAtualizar = exibirBotaoAtualizar;
	}

	public void setExibirBotaoExcluir(boolean exibirBotaoExcluir) {
		this.exibirBotaoExcluir = exibirBotaoExcluir;
	}

	public void setExibirBotaoNovo(boolean exibirBotaoNovo) {
		this.exibirBotaoNovo = exibirBotaoNovo;
	}

	public void setExibirBotaoSalvar(boolean exibirBotaoSalvar) {
		this.exibirBotaoSalvar = exibirBotaoSalvar;
	}

	public void setExibirBotaoVoltar(boolean exibirBotaoVoltar) {
		this.exibirBotaoVoltar = exibirBotaoVoltar;
	}

	public void setExibirCadastro(boolean exibirCadastro) {
		this.exibirCadastro = exibirCadastro;
	}

	public void setExibirIfen(boolean exibirIfen) {
		this.exibirIfen = exibirIfen;
	}

	public void setExibirPesquisa(boolean exibirPesquisa) {
		this.exibirPesquisa = exibirPesquisa;
	}

	public void setFoward(String foward) {
		this.foward = foward;
	}

	public void setFuncionalidade(String funcionalidade) {
		this.funcionalidade = funcionalidade;
	}

	public void setListaResult(List<MembroVo> listaResult) {
		this.listaResult = listaResult;
	}

	public void setRegistroNaoEncontrado(boolean registroNaoEncontrado) {
		this.registroNaoEncontrado = registroNaoEncontrado;
	}

	public void setRelatorioCorrente(String relatorioCorrente) {
		this.relatorioCorrente = relatorioCorrente;
	}

	/**
	 * status botoes Cadastro
	 */
	protected void statusBotoesCadastro() {
		exibirCadastro = true;
		exibirBotaoSalvar = true;
		exibirPesquisa = false;
		exibirBotaoNovo = false;
		exibirBotaoVoltar = true;

		acaoTela = ACAO_CADASTRO;
	}

	/**
	 * status botoes pesquisar
	 */
	protected void statusBotoesPesquisa() {

		exibirCadastro = false;
		exibirBotaoSalvar = false;
		exibirPesquisa = true;
		exibirBotaoNovo = true;
		exibirBotaoVoltar = false;
		exibirBotaoExcluir = false;
		exibirBotaoAtualizar = false;

		acaoTela = "";
	}

	/**
	 * definir status dos botoes na edicao
	 */
	protected void statusEditar() {

		exibirBotaoAtualizar = true;
		exibirBotaoExcluir = true;
		exibirCadastro = true;
		exibirPesquisa = false;
		exibirBotaoSalvar = false;
		exibirBotaoNovo = false;
		exibirBotaoVoltar = true;

		acaoTela = ACAO_ATUALIZAR;
	}

	/**
	 * @return the listaNiverMembroVisitante
	 */
	public List<MembroVo> getListaNiverMembroVisitante() {
		return listaNiverMembroVisitante;
	}

	/**
	 * @param listaNiverMembroVisitante the listaNiverMembroVisitante to set
	 */
	public void setListaNiverMembroVisitante(
			List<MembroVo> listaNiverMembroVisitante) {
		this.listaNiverMembroVisitante = listaNiverMembroVisitante;
	}
	
	

}
